package com.atguigu.gulimall.product.service;

import com.atguigu.common.utils.PageUtils;
import com.atguigu.gulimall.product.entity.AttrEntity;
import com.atguigu.gulimall.product.entity.AttrGroupEntity;
import com.atguigu.gulimall.product.vo.AttrGroupRelationReqVo;
import com.atguigu.gulimall.product.vo.AttrGroupWithAttrsVo;
import com.atguigu.gulimall.product.vo.SpuItemAttrGroupVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 属性分组
 *
 * @author laisanshan
 * @email fromzero911@gmail.com
 * @date 2021-07-12 15:05:13
 */
public interface AttrGroupService extends IService<AttrGroupEntity> {

    PageUtils queryPage(Map<String, Object> params);

    PageUtils queryPage(Map<String, Object> params, Long catelogId);

    /**
     * 获取属性分组的关联的所有属性
     *
     * @param attrgroupId 分组id
     * @return 属性列表
     */
    List<AttrEntity> queryAttrListByGroupId(Long attrgroupId);

    /**
     * 删除属性与分组的关联关系
     *
     * @param relationReqVos 属性&属性分组关联请求vo
     */
    void removeAttrRelation(List<AttrGroupRelationReqVo> relationReqVos);

    /**
     * 获取属性分组里面还没有关联的本分类里面的其他基本属性
     *
     * @param params      分页参数
     * @param attrgroupId 属性分组id
     * @return 属性分组里面还没有关联的本分类里面的其他基本属性
     */
    PageUtils queryNoattrRelationByGroupId(Map<String, Object> params, Long attrgroupId);

    /**
     * 添加属性与分组关联关系
     *
     * @param relationReqVos 属性&属性分组关联请求vo
     */
    void saveAttrRelation(List<AttrGroupRelationReqVo> relationReqVos);

    /**
     * 获取分类下所有分组&关联属性
     *
     * @param catelogId 分类id
     * @return 分组&关联属性列表
     */
    List<AttrGroupWithAttrsVo> queryGroupAndRelationAttrByCatId(Long catelogId);

    /**
     * 根据spuid获取spu的规格参数信息
     *
     * @param spuId     spuid
     * @param catalogId 分类id
     * @return spu的规格参数信息
     */
    List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(Long spuId, Long catalogId);

}

